Content displayed on web pages can be generated by one or more content servers in response to content requests. The content requests can be generated during the rendering of a web page by a client device. For example, advertisements generated on a web page published by a publisher can be generated by an advertisement server. These advertisements are traditionally retrieved using a scripting language, such as JavaScript, and rendered in a browser on a client device. Each such location for an advertisement is typically referred to as an advertisement slot. The script that the publisher adds to a page for an advertisement slot to be retrieved is referred to as a snippet. Typically, the publisher is provided with a snippet generated by the advertisement server, which is then inserted into the web page. When a client browser visits a publisher's page, e.g., requests and receives the web page data for rendering, the client browser encounters the inserted snippets, which upon execution instructs the browser to transmit an advertisement request to the advertisement server. The advertisement server processes the snippet and returns to the client browser the advertisement content to be displayed on the publisher's page. The retrieved advertisement content is used to fill the advertisement slot.
Publishers, however, have many disparate advertisements competing for selection in a particular advertisement slot, and thus advertisement selection schemes have been developed. Publishers can, for example, rely on context-based advertisement targeting. However, context-based advertisement targeting does not by itself allow a publisher to express preferences over which ads to show with the content.